home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_tkcvs.idb / usr / freeware / lib / tkcvs / venget.tcl.z / venget.tcl
Encoding:
Text File  |  1999-04-16  |  8.1 KB  |  272 lines

  1. #
  2. # $Id: venget.tcl,v 1.5 1995/11/08 04:12:24 davide Exp $
  3. #
  4. # Most of the code in this file was taken adapted from file checkout.tcl
  5. # for use in selecting a module to be used as the vendor module when doing
  6. # a Module Level Merge.
  7. #   venselect_setup was adapted from checkout_setup
  8. #   venselect_scroll was adapted from checkout_scroll
  9. #   venselect_run was adapted from checkout_run
  10. #   venselect_fill_listbox was adapted from checkout_fill_listbox
  11. #   venselect_fill_dir was adapted from checkout_fill_dir
  12. #   venselect_select_code was adapted from checkout_select_code
  13. #   venselect_act_on_code was adapted from checkout_on_code
  14. #
  15. # By: Eugene Lee, Aerospace Corporation, 10/3/95  
  16.  
  17. proc venselect_setup {} {
  18.   global venselect_mcode feedback
  19.   global venselect_version
  20.  
  21.   # This variable is a list containing all of the directories and
  22.   # subdirectories that are expanded on the listbox.
  23.  
  24.   global displayed_list
  25.  
  26.   toplevel .venselect
  27.   frame .venselect.down -relief groove -border 2
  28.   frame .venselect.up
  29.   frame .venselect.up.left -relief raised
  30.   frame .venselect.up.right -relief raised
  31.  
  32.   pack .venselect.up -side top -fill x
  33.   set feedback(vget) [entry .venselect.feedback -relief sunken]
  34.   pack .venselect.feedback -side bottom -fill x -expand yes
  35.   pack .venselect.down -side bottom -fill x
  36.   pack .venselect.up.left -side left -fill both
  37.   pack .venselect.up.right -side left -fill both -expand 1
  38.  
  39.   label .venselect.lven -text "Vendor Module To Be Selected"
  40.   entry .venselect.ven -relief sunken
  41.  
  42.   pack .venselect.lven -in .venselect.up.left \
  43.     -side top -fill x -pady 3
  44.   pack .venselect.ven -in .venselect.up.right \
  45.     -side top -fill both -expand 1 -pady 3
  46.  
  47.   #
  48.   # Create buttons
  49.   #
  50.  
  51.   button .venselect.ok -text "OK" \
  52.     -command {
  53.       if {$venselect_mcode != ""} {
  54.         feedback_vget \
  55.           "Getting releasetags info for CVS module\
  56.           $venselect_mcode, Please wait"
  57.         put_rev_tags
  58.         .merge.vendor.name.e config -state normal
  59.         .merge.vendor.name.e delete 0 end
  60.         .merge.vendor.name.e insert 0 $venselect_mcode
  61.         .merge.vendor.name.e config -state disabled
  62.         feedback_vget ""
  63.       }
  64.       wm withdraw .venselect
  65.     }
  66.  
  67.   button .venselect.quit -text "Quit" \
  68.     -command {wm withdraw .venselect}
  69.  
  70.   pack .venselect.ok  .venselect.quit \
  71.     -in .venselect.down -side left \
  72.     -ipadx 2 -ipady 2 -padx 4 -pady 4 -fill both -expand 1
  73.  
  74.   # Create a scroll bar and three list boxes.
  75.   scrollbar .venselect.scroll -relief sunken \
  76.     -command {venselect_scroll}
  77.   listbox .venselect.namelist \
  78.     -yscroll {.venselect.scroll set} -relief sunken \
  79.     -width 40 -height 20 -setgrid yes -selectmode single
  80.   listbox .venselect.infolist \
  81.     -yscroll {.venselect.scroll set} -relief sunken \
  82.     -width 10 -height 20 -setgrid yes -selectmode single
  83.   listbox .venselect.codelist \
  84.     -yscroll {.venselect.scroll set} -relief sunken \
  85.     -width 20 -height 20 -setgrid yes -selectmode single
  86.  
  87.   # Set up key bindings for the lists so that they all select as
  88.   # if the code list was pointed to.
  89.   bind .venselect.codelist <Double-Button-1> \
  90.     {venselect_act_on_code %y}
  91.   bind .venselect.namelist <Double-Button-1> \
  92.     {venselect_act_on_code %y}
  93.   bind .venselect.infolist <Double-Button-1> \
  94.     {venselect_act_on_code %y}
  95.   bind .venselect.codelist <1> {venselect_select_code %y}
  96.   bind .venselect.codelist <Button-2> {nop}
  97.   bind .venselect.codelist <Any-B2-Motion> {nop}
  98.   bind .venselect.namelist <1> {venselect_select_code %y}
  99.   bind .venselect.namelist <Button-2> {nop}
  100.   bind .venselect.namelist <Any-B2-Motion> {nop}
  101.   bind .venselect.infolist <1> {venselect_select_code %y}
  102.   bind .venselect.infolist <Button-2> {nop}
  103.   bind .venselect.infolist <Any-B2-Motion> {nop}
  104.  
  105.   # Pack the scroll bar and the 3 lists side by side.
  106.   pack .venselect.scroll -side right -fill y -padx 2 -pady 2
  107.   pack .venselect.namelist .venselect.infolist .venselect.codelist \
  108.     -side left -fill both -expand 1
  109.  
  110.   # Disable "Vendor Module To Be Selected" entry so that user cannot
  111.   # enter in data manually
  112.   .venselect.ven configure -state disabled
  113.   
  114.   # Window manager stuff.
  115.   wm withdraw .venselect
  116.   wm title .venselect "Select A Module For Vendor Code"
  117.   wm minsize .venselect 1 1
  118.  
  119.   set displayed_list {}
  120.   venselect_fill_listbox
  121. }
  122.  
  123. proc venselect_scroll args {
  124.  
  125.   # To support scrolling 3 listboxes simultaneously
  126.  
  127.   eval ".venselect.namelist yview $args"
  128.   eval ".venselect.infolist yview $args"
  129.   eval ".venselect.codelist yview $args"
  130. }
  131.  
  132. proc venselect_run {} {
  133.   wm deiconify .venselect
  134. }
  135.  
  136. proc venselect_fill_listbox {} {
  137. #
  138. # Do this to update the display of the listbox.
  139. #
  140.   global displayed_list
  141.   global dtitle
  142.  
  143.   .venselect.namelist delete 0 end
  144.   .venselect.infolist delete 0 end
  145.   .venselect.codelist delete 0 end
  146.  
  147.   if {! [info exists dtitle]} {
  148.     return
  149.   }
  150.  
  151.   foreach dname [array names dtitle] {
  152.     if {[file dirname $dname] == "."} {
  153.       .venselect.namelist insert end $dtitle($dname)
  154.       .venselect.infolist insert end "Directory"
  155.       .venselect.codelist insert end $dname
  156.       if {[lsearch $displayed_list $dname] != -1} {
  157.         venselect_fill_dir $dname
  158.       }
  159.     }
  160.   }
  161. }
  162.  
  163. proc venselect_fill_dir {dname} {
  164.   global mtitle
  165.   global dtitle
  166.   global dcontents
  167.   global dsubmenus
  168.   global displayed_list
  169.  
  170.   # Display all of the modules in this subdir.
  171.   if [info exists dcontents($dname)] {
  172.     foreach mname $dcontents($dname) {
  173.       .venselect.namelist insert end $mtitle($mname)
  174.       .venselect.infolist insert end "Module"
  175.       .venselect.codelist insert end $mname
  176.     }
  177.   }
  178.  
  179.   # Recurse through each subdir, only displaying sublevels of those
  180.   # that are marked for display.
  181.  
  182.   if [info exists dsubmenus($dname)] {
  183.     foreach subdir $dsubmenus($dname) {
  184.       .venselect.namelist insert end $dtitle($subdir)
  185.       .venselect.infolist insert end "Directory"
  186.       .venselect.codelist insert end $subdir
  187.       if {[lsearch $displayed_list $subdir] != -1} {
  188.         venselect_fill_dir $subdir
  189.       }
  190.     }
  191.   }
  192. }
  193.  
  194. proc venselect_select_code {yposition} {
  195. #
  196. # Do this when a code is clicked on.
  197. #
  198.   global venselect_ypos
  199.   global venselect_mcode
  200.  
  201.   set venselect_ypos $yposition
  202.  
  203.   # This does the actual selection
  204.   .venselect.codelist select set \
  205.     [.venselect.codelist nearest $yposition]
  206.   set code [selection get]
  207.   
  208.   # This will update the "Module Name" entry box 
  209.   set venselect_mcode [lindex $code 0]
  210.   
  211.   # Unlike checkout_select_code, only Modules will be displayed
  212.   .venselect.ven config -state normal
  213.   .venselect.ven delete 0 end
  214.   .venselect.infolist select set \
  215.     [.venselect.infolist nearest $yposition]
  216.   set info [selection get]
  217.   if {$info == "Module"} {
  218.     .venselect.ven insert 0 $code
  219.   }
  220.   .venselect.ven config -state disabled
  221.     
  222.   
  223.   return $code
  224. }
  225.  
  226. proc venselect_act_on_code {yposition} {
  227. #
  228. # Do this when a code is double-clicked on.
  229. #
  230.   global venselect_mcode
  231.   global displayed_list
  232.  
  233.   # Do the selection bit.
  234.   set code [venselect_select_code $yposition]
  235.  
  236.   # If the module is displayed, remove it from the display.  If it is
  237.   # not displayed, add it to the display.
  238.   set pos [lsearch $displayed_list $venselect_mcode]
  239.   if {$pos == -1} {
  240.     lappend displayed_list $venselect_mcode
  241.   } else {
  242.     set displayed_list [lreplace $displayed_list $pos $pos]
  243.   }
  244.  
  245.   # Redraw the listbox.
  246.   venselect_fill_listbox
  247.  
  248.   # Do the selection bit again so that the item remains selected after the
  249.   # redraw.
  250.   set code [venselect_select_code $yposition]
  251. }
  252.  
  253. proc feedback_vget { message } {
  254.   #######################################################################    
  255.   # This code is adapted from the text "Practical Programming in
  256.   # Tcl and Tk", by Brent B. Welch (see page 209)
  257.   # An entry widget is used because it won't change size
  258.   # base on the message length, and it can be scrolled by
  259.   # dragging with button 2.
  260.   # Author: Eugene Lee, Aerospace Corporation, 9/23/95
  261.   #######################################################################    
  262.   global cvscfg feedback
  263.   set e $feedback(vget)
  264.   $e config -state normal
  265.   $e delete 0 end
  266.   $e insert 0 $message
  267.   # Leave the entry is a read-only state
  268.   $e config -state disabled
  269.   # Force a disable update
  270.   update idletasks
  271. }
  272.